<?php

namespace Fize\Third\WechatWork;

/**
 * Web登录
 */
class SSO
{

    /**
     * 登录类型 - 服务商登录
     */
    const LOGIN_TYPE_SERVICE_APP = 'ServiceApp';

    /**
     * 登录类型 - 企业自建/代开发应用登录
     */
    const LOGIN_TYPE_CORP_APP = 'CorpApp';

    /**
     * 构造企业微信登录链接
     * @param string      $login_type   登录类型
     * @param string      $appid        登录类型为企业自建应用/服务商代开发应用时填企业 CorpID，第三方登录时填登录授权 SuiteID
     * @param string      $redirect_uri 登录成功重定向url
     * @param string|null $agentid      企业自建应用/服务商代开发应用 AgentID，当login_type=CorpApp时填写
     * @param string|null $state        登录 state，用于保持请求和回调的状态，授权请求后原样带回给企业。
     * @param string|null $lang         语言类型。zh：中文；en：英文。
     * @return string
     */
    public function login(string $login_type, string $appid, string $redirect_uri, string $agentid = null, string $state = null, string $lang = null): string
    {
        $redirect_uri = urlencode($redirect_uri);
        $url = "https://login.work.weixin.qq.com/wwlogin/sso/login?login_type={$login_type}&appid={$appid}&redirect_uri={$redirect_uri}";
        if (!is_null($agentid)) {
            $url .= "&agentid={$agentid}";
        }
        if (!is_null($state)) {
            $url .= "&state={$state}";
        }
        if (!is_null($lang)) {
            $url .= "&lang={$lang}";
        }
        return $url;
    }
}